package com.hera.base.web.vaadin.mantenimiento;

import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;

import com.hera.base.util.DateUtil;
import com.hera.base.util.FiltroDTO;
import com.hera.base.util.TableCustom;
import com.hera.base.web.BaseUI;
import com.hera.base.web.MantenimientoMaestroDetalle;
import com.hera.process.config.domain.Holiday;
import com.hera.process.config.domain.ParameterDetail;
import com.hera.process.config.rest.delegate.ConfigDelegate;
import com.vaadin.annotations.AutoGenerated;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.event.FieldEvents.TextChangeEvent;
import com.vaadin.event.FieldEvents.TextChangeListener;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.TextArea;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;

public class HolidayUI extends BaseUI implements MantenimientoMaestroDetalle,ClickListener {

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	/**
	 * 
	 */
	private static final long serialVersionUID = -672169719239964685L;
	@AutoGenerated
	private VerticalLayout mainLayout;
	@AutoGenerated
	private VerticalLayout verticalLayout_2;
	@AutoGenerated
	private HorizontalLayout lytMaestro;
	@AutoGenerated
	private VerticalLayout verticalLayout_3;
	@AutoGenerated
	private HorizontalLayout hlytBotonera;
	@AutoGenerated
	private Button btnEliminarMaestro;
	@AutoGenerated
	private Button btnGuardarMaestro;
	@AutoGenerated
	private TextField txtFinMaestro;
	@AutoGenerated
	private TextField txtInicioMaestro;
	@AutoGenerated
	private ComboBox cmbTipoMaestro;
	@AutoGenerated
	private ComboBox cmbMesMaestro;
	@AutoGenerated
	private TextArea txaDescripcionMaestro;
	@AutoGenerated
	private TextField txtNombreMaestro;
	@AutoGenerated
	private Label label_1;
	@AutoGenerated
	private HorizontalLayout horizontalLayout_2;
	@AutoGenerated
	private TableCustom tblfMaestro;
	private static final Logger log=Logger.getLogger(HolidayUI.class); 

	/*
	 
	 */
	
	  @Autowired
	  ConfigDelegate configDelegate;
	  boolean esNuevo;
	  Holiday holiday;
	  Long idCalendar;
	  ParameterDetail listDetail;
	  
	  
	  
	public HolidayUI() {
		buildMainLayout();
		setCompositionRoot(mainLayout);

		// TODO add user code here
	}
	
	
	@Override
	protected void postConstruct() {
		cargarFormulario();
		buscarMaestro();
		
	}
	
	
	@Override
	public void cargarFormulario() {
		
		txtInicioMaestro.setNullRepresentation("");
		txaDescripcionMaestro.setNullRepresentation("");
		txtNombreMaestro.setNullRepresentation("");
		txtFinMaestro.setNullRepresentation("");
		
		log.info("inicio cargarHoliday");
		esNuevo=true;
		holiday=null;
		
		btnEliminarMaestro.setVisible(false);
		btnEliminarMaestro.addClickListener(this);
		btnGuardarMaestro.addClickListener(this);
		btnGuardarMaestro.setCaption("Nuevo");
		
		txtNombreMaestro.addStyleName("fieldRequired");
		tblfMaestro.setTitulo("Listado de Dias Feriados");
		tblfMaestro.setHeight("200px");	
		
		tblfMaestro.addColumn("name", "Nombre", 100, true, String.class);
		tblfMaestro.addColumn("mes.name", "Mes", 100, true, String.class);
		tblfMaestro.addColumn("days", "Dias", 100, true, String.class);
		
		tblfMaestro.construir();
		tblfMaestro.addTextChangeListener(new TextChangeListener() {
		private static final long serialVersionUID = 1L;

		@Override
		public void textChange(TextChangeEvent event) {
			buscarMaestro(event);
			
			 
			
		}
	});
	
	tblfMaestro.addValueChangeListener(new ValueChangeListener() {
		private static final long serialVersionUID = 1L;

		@Override
		public void valueChange(ValueChangeEvent event) {
			holiday=(Holiday)tblfMaestro.getSelectedItem(event);
			
			esNuevo=(holiday==null);
			if (esNuevo) {
				limpiarMaestro();
			}else {
				
				
				btnEliminarMaestro.setVisible(true);
				btnGuardarMaestro.setCaption("Modificar");
				
				
				txtNombreMaestro.setValue(holiday.getName());
				txaDescripcionMaestro.setValue(holiday.getDescription());
				
				cmbMesMaestro.setValue(holiday.getMes());
				cmbTipoMaestro.setValue(holiday.getTipo());
				
				txtInicioMaestro.setValue(DateUtil.getFechaFormat(holiday.getHolidayStart(),"dd"));  
				txtFinMaestro.setValue(DateUtil.getFechaFormat(holiday.getHolidayEnd(),"dd"));  		
			
				
				

				
			}
			
			
		}
	});
	
	List<ParameterDetail> lstStatus=configDelegate.findMeses();
	BeanItemContainer<ParameterDetail>container=new BeanItemContainer<ParameterDetail>(ParameterDetail.class);
	container.addAll(lstStatus);
	cmbMesMaestro.setContainerDataSource(container);
	cmbMesMaestro.setItemCaptionPropertyId("name");
	
	
	List<ParameterDetail> lstStatus1=configDelegate.findTipoFeriados();
	BeanItemContainer<ParameterDetail>container1=new BeanItemContainer<ParameterDetail>(ParameterDetail.class);
	container1.addAll(lstStatus1);
	cmbTipoMaestro.setContainerDataSource(container1);
	cmbTipoMaestro.setItemCaptionPropertyId("name");
	
	
	
	
//	LISTADO DE INICIO Y FIN DE DIAS
		
//	List<ParameterDetail> lstStatus2=configDelegate.findDays();
//	BeanItemContainer<ParameterDetail>container2=new BeanItemContainer<ParameterDetail>(ParameterDetail.class);
//	container2.addAll(lstStatus2);
//	cmbInicioMaestro.setContainerDataSource(container2);
//	cmbInicioMaestro.setItemCaptionPropertyId("name");
//	
//	List<ParameterDetail> lstStatus3=configDelegate.findDays();
//	BeanItemContainer<ParameterDetail>container3=new BeanItemContainer<ParameterDetail>(ParameterDetail.class);
//	container3.addAll(lstStatus3);
//	cmbFinMaestro.setContainerDataSource(container3);
//	cmbFinMaestro.setItemCaptionPropertyId("name");
		
		
	}
	
	

	@Override
	public void buttonClick(ClickEvent event) {
		
		if(event.getButton().equals(btnEliminarMaestro)){
			eliminarMaestro();
		}else if(event.getButton().equals(btnGuardarMaestro)){
			guardarMaestro();
		}
		
	}

	

	@Override
	public void buscarMaestro() {
		buscarMaestro(null);
		
	}

	@Override
	public void buscarMaestro(TextChangeEvent event) {
	
		mostrarData(idCalendar);
	}

	@Override
	public void limpiarMaestro() {
	log.info("INICIO LIMPIARMAESTRO");
	btnEliminarMaestro.setVisible(false);
	btnGuardarMaestro.setCaption("Nuevo");
	txtNombreMaestro.setValue("");
	txaDescripcionMaestro.setValue("");
	cmbMesMaestro.setValue(null);
	cmbTipoMaestro.setValue(null);
	txtInicioMaestro.setValue("");
	txtFinMaestro.setValue("");
	
		
	}

	@Override
	public void eliminarMaestro() {
		log.info("inicio eliminarMaestro");
		configDelegate.deleteHoliday(holiday);
		buscarMaestro();
		limpiarMaestro();
		log.info("fin eliminarMaestro");	
		
	}

	@Override
	public void guardarMaestro() {
		log.info("inicio guardarMaestro");
		if(esNuevo){
			holiday=new Holiday();
			
			configDelegate.createHoliday(holiday);
			
					
		}else {
			configDelegate.updateHoliday(holiday);
		}
		eliminarMaestro();
		buscarMaestro();
		log.info("fin guardarMaestro");
	}

	@Override
	public void buscarDetalle() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void buscarDetalle(TextChangeEvent event) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void limpiarDetalle() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void eliminarDetalle() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void guardarDetalle() {
		// TODO Auto-generated method stub
		
	}



	public void mostrarData(Long idCalendar){
		
		log.info("INICIO BUSCARHOLIDAY");
		FiltroDTO filtroDTO= new FiltroDTO();
		filtroDTO.addParametro("calendar.idCalendar", idCalendar);
		
		
		
		List<Holiday>lstHoliday=configDelegate.findAllHolidays(filtroDTO);
		tblfMaestro.setLstData(lstHoliday);	
		
	
	}


	@AutoGenerated
	private VerticalLayout buildMainLayout() {
		// common part: create layout
		mainLayout = new VerticalLayout();
		mainLayout.setImmediate(false);
		mainLayout.setWidth("100%");
		mainLayout.setHeight("100%");
		mainLayout.setMargin(false);
		
		// top-level component properties
		setWidth("100.0%");
		setHeight("100.0%");
		
		// verticalLayout_2
		verticalLayout_2 = buildVerticalLayout_2();
		mainLayout.addComponent(verticalLayout_2);
		
		return mainLayout;
	}


	@AutoGenerated
	private VerticalLayout buildVerticalLayout_2() {
		// common part: create layout
		verticalLayout_2 = new VerticalLayout();
		verticalLayout_2.setImmediate(false);
		verticalLayout_2.setWidth("-1px");
		verticalLayout_2.setHeight("-1px");
		verticalLayout_2.setMargin(false);
		
		// lytMaestro
		lytMaestro = buildLytMaestro();
		verticalLayout_2.addComponent(lytMaestro);
		
		return verticalLayout_2;
	}


	@AutoGenerated
	private HorizontalLayout buildLytMaestro() {
		// common part: create layout
		lytMaestro = new HorizontalLayout();
		lytMaestro.setImmediate(false);
		lytMaestro.setWidth("-1px");
		lytMaestro.setHeight("-1px");
		lytMaestro.setMargin(false);
		
		// horizontalLayout_2
		horizontalLayout_2 = buildHorizontalLayout_2();
		lytMaestro.addComponent(horizontalLayout_2);
		
		// verticalLayout_3
		verticalLayout_3 = buildVerticalLayout_3();
		lytMaestro.addComponent(verticalLayout_3);
		
		return lytMaestro;
	}


	@AutoGenerated
	private HorizontalLayout buildHorizontalLayout_2() {
		// common part: create layout
		horizontalLayout_2 = new HorizontalLayout();
		horizontalLayout_2.setImmediate(false);
		horizontalLayout_2.setWidth("570px");
		horizontalLayout_2.setHeight("-1px");
		horizontalLayout_2.setMargin(false);
		
		// tblfMaestro
		tblfMaestro = new TableCustom();
		tblfMaestro.setImmediate(false);
		tblfMaestro.setWidth("-1px");
		tblfMaestro.setHeight("-1px");
		horizontalLayout_2.addComponent(tblfMaestro);
		
		return horizontalLayout_2;
	}


	@AutoGenerated
	private VerticalLayout buildVerticalLayout_3() {
		// common part: create layout
		verticalLayout_3 = new VerticalLayout();
		verticalLayout_3.setImmediate(false);
		verticalLayout_3.setWidth("-1px");
		verticalLayout_3.setHeight("-1px");
		verticalLayout_3.setMargin(false);
		verticalLayout_3.setSpacing(true);
		
		// label_1
		label_1 = new Label();
		label_1.setStyleName("titulo");
		label_1.setImmediate(false);
		label_1.setWidth("-1px");
		label_1.setHeight("-1px");
		label_1.setValue("Registro Holiday");
		verticalLayout_3.addComponent(label_1);
		
		// txtNombreMaestro
		txtNombreMaestro = new TextField();
		txtNombreMaestro.setImmediate(false);
		txtNombreMaestro.setDescription("Celebracion");
		txtNombreMaestro.setWidth("-1px");
		txtNombreMaestro.setHeight("-1px");
		txtNombreMaestro.setInputPrompt("Celebracion");
		verticalLayout_3.addComponent(txtNombreMaestro);
		
		// txaDescripcionMaestro
		txaDescripcionMaestro = new TextArea();
		txaDescripcionMaestro.setImmediate(false);
		txaDescripcionMaestro.setDescription("Descripcion");
		txaDescripcionMaestro.setWidth("-1px");
		txaDescripcionMaestro.setHeight("-1px");
		txaDescripcionMaestro.setInputPrompt("Descripcion");
		verticalLayout_3.addComponent(txaDescripcionMaestro);
		
		// cmbMesMaestro
		cmbMesMaestro = new ComboBox();
		cmbMesMaestro.setImmediate(false);
		cmbMesMaestro.setWidth("-1px");
		cmbMesMaestro.setHeight("-1px");
		verticalLayout_3.addComponent(cmbMesMaestro);
		
		// cmbTipoMaestro
		cmbTipoMaestro = new ComboBox();
		cmbTipoMaestro.setImmediate(false);
		cmbTipoMaestro.setDescription("Tipo");
		cmbTipoMaestro.setWidth("-1px");
		cmbTipoMaestro.setHeight("-1px");
		verticalLayout_3.addComponent(cmbTipoMaestro);
		
		// txtInicioMaestro
		txtInicioMaestro = new TextField();
		txtInicioMaestro.setImmediate(false);
		txtInicioMaestro.setDescription("Dia Inicio");
		txtInicioMaestro.setWidth("-1px");
		txtInicioMaestro.setHeight("-1px");
		txtInicioMaestro.setInputPrompt("Dia Inicio");
		verticalLayout_3.addComponent(txtInicioMaestro);
		
		// txtFinMaestro
		txtFinMaestro = new TextField();
		txtFinMaestro.setImmediate(false);
		txtFinMaestro.setDescription("Dia Fin");
		txtFinMaestro.setWidth("-1px");
		txtFinMaestro.setHeight("-1px");
		txtFinMaestro.setInputPrompt("Dia Fin");
		verticalLayout_3.addComponent(txtFinMaestro);
		
		// hlytBotonera
		hlytBotonera = buildHlytBotonera();
		verticalLayout_3.addComponent(hlytBotonera);
		
		return verticalLayout_3;
	}


	@AutoGenerated
	private HorizontalLayout buildHlytBotonera() {
		// common part: create layout
		hlytBotonera = new HorizontalLayout();
		hlytBotonera.setImmediate(false);
		hlytBotonera.setWidth("-1px");
		hlytBotonera.setHeight("-1px");
		hlytBotonera.setMargin(false);
		hlytBotonera.setSpacing(true);
		
		// btnGuardarMaestro
		btnGuardarMaestro = new Button();
		btnGuardarMaestro.setCaption("Guardar");
		btnGuardarMaestro.setImmediate(true);
		btnGuardarMaestro.setWidth("-1px");
		btnGuardarMaestro.setHeight("-1px");
		hlytBotonera.addComponent(btnGuardarMaestro);
		
		// btnEliminarMaestro
		btnEliminarMaestro = new Button();
		btnEliminarMaestro.setCaption("Eliminar");
		btnEliminarMaestro.setImmediate(true);
		btnEliminarMaestro.setWidth("-1px");
		btnEliminarMaestro.setHeight("-1px");
		hlytBotonera.addComponent(btnEliminarMaestro);
		
		return hlytBotonera;
	}

}
